package net.gamasoft.sistemadeinventarios.view;

import java.awt.EventQueue;
import java.util.ArrayList;

import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.DefaultComboBoxModel;

import net.gamasoft.sistemadeinventarios.dao.BancoDAO;
import net.gamasoft.sistemadeinventarios.dao.ClienteDAO;
import net.gamasoft.sistemadeinventarios.model.Banco;
import net.gamasoft.sistemadeinventarios.model.Cliente;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class GuardarCliente extends JInternalFrame {
	private JTextField txtNombre;
	private JTextField txtApaterno;
	private JTextField txtAmaterno;
	private JTextField txtEdad;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					GuardarCliente frame = new GuardarCliente();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public GuardarCliente() {
		setIconifiable(true);
		setMaximizable(true);
		setClosable(true);
		setTitle("Guardar Clientes");
		setBounds(100, 100, 453, 375);
		getContentPane().setLayout(null);
		
		JLabel lblNombre = new JLabel("Nombre: *");
		lblNombre.setBounds(55, 52, 75, 14);
		getContentPane().add(lblNombre);
		
		JLabel lblAPaterno = new JLabel("A. Paterno: *");
		lblAPaterno.setBounds(55, 95, 86, 14);
		getContentPane().add(lblAPaterno);
		
		JLabel lblAMaterno = new JLabel("A. Materno:");
		lblAMaterno.setBounds(55, 140, 86, 14);
		getContentPane().add(lblAMaterno);
		
		JLabel lblEdad = new JLabel("Edad: *");
		lblEdad.setBounds(55, 189, 56, 14);
		getContentPane().add(lblEdad);
		
		JLabel lblBanco = new JLabel("Banco: *");
		lblBanco.setBounds(55, 237, 56, 14);
		getContentPane().add(lblBanco);
		
		JLabel lblNewLabel = new JLabel("Ingresa los datos del cliente a guardar:");
		lblNewLabel.setBounds(54, 11, 240, 14);
		getContentPane().add(lblNewLabel);
		
		txtNombre = new JTextField();
		txtNombre.setBounds(140, 52, 154, 20);
		getContentPane().add(txtNombre);
		txtNombre.setColumns(10);
		
		txtApaterno = new JTextField();
		txtApaterno.setBounds(140, 92, 154, 20);
		getContentPane().add(txtApaterno);
		txtApaterno.setColumns(10);
		
		txtAmaterno = new JTextField();
		txtAmaterno.setBounds(140, 137, 154, 20);
		getContentPane().add(txtAmaterno);
		txtAmaterno.setColumns(10);
		
		txtEdad = new JTextField();
		txtEdad.setBounds(140, 186, 86, 20);
		getContentPane().add(txtEdad);
		txtEdad.setColumns(10);

		final JComboBox cboBancos = new JComboBox();
		cboBancos.setModel(new DefaultComboBoxModel(new String[] {"--Selecciona un banco--"}));

		BancoDAO bancoDAO = new BancoDAO();
		try {
			//Se recupera la lista de bancos consultados.
			ArrayList<Banco> bancos = bancoDAO.consultarBanco();
			//Se itera la lista de bancos
			for (Banco banco : bancos) {
				cboBancos.addItem(banco.getIdBanco() + "-" +banco.getNombre());
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		cboBancos.setBounds(140, 234, 154, 20);
		getContentPane().add(cboBancos);
		
		JLabel lblLogo = new JLabel("");
		lblLogo.setIcon(new ImageIcon(GuardarCliente.class.getResource("/resources/logoTec.png")));
		lblLogo.setBounds(304, 21, 121, 108);
		getContentPane().add(lblLogo);
		
		JButton btnGuardar = new JButton("Guardar");
		btnGuardar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String nombre = txtNombre.getText();
				String apaterno = txtApaterno.getText();
				String amaterno = txtAmaterno.getText();
				String edad = txtEdad.getText();

				//Si el campo nombre esta vacio
				if (nombre.isEmpty()) {
					JOptionPane.showMessageDialog(null, "El campo nombre es requerido",
							"ERROR", JOptionPane.ERROR_MESSAGE);
					return;
				}

				//Si el campo apaterno esta vacio
				if (apaterno.isEmpty()) {
					JOptionPane.showMessageDialog(null, "El campo apaterno es requerido",
							"ERROR", JOptionPane.ERROR_MESSAGE);
					return;
				}

				//Si el campo edad esta vacio
				if (edad.isEmpty()) {
					JOptionPane.showMessageDialog(null, "El campo edad es requerido",
							"ERROR", JOptionPane.ERROR_MESSAGE);
					return;
				}

				int idBanco = 0;

				//Se recupera del combo, el banco seleccionado.
				String bancoSeleccionado = cboBancos.getSelectedItem().toString();
				//Si no se selecciono un banco
				if (bancoSeleccionado.equals("--Selecciona un banco--")) {
					JOptionPane.showMessageDialog(null, "Debes seleccionar un banco", 
							"ERROR", JOptionPane.ERROR_MESSAGE);
					return;
				} else {
					idBanco = Integer.parseInt(bancoSeleccionado.substring(0, bancoSeleccionado.indexOf("-")));
				}

				Cliente cliente = new Cliente();
				cliente.setNombre(nombre);
				cliente.setApaterno(apaterno);
				cliente.setAmaterno(amaterno);
				cliente.setEdad(Integer.parseInt(edad));

				Banco banco = new Banco();
				banco.setIdBanco(idBanco);

				cliente.setBancoDTO(banco);

				ClienteDAO clienteDAO = new ClienteDAO();
				try {
					boolean guardado = clienteDAO.guardarCliente(cliente);
					if (guardado) {
						JOptionPane.showMessageDialog(null, "Cliente guardado exitosamente");
						txtNombre.grabFocus();
						txtNombre.setText("");
						txtApaterno.setText("");
						txtAmaterno.setText("");
						txtEdad.setText("");
						cboBancos.setSelectedIndex(0);
						GraficaClientes.actualizarGraficaClientes();
						GraficaClientes.graficaClientes.repaint();
					} else {
						JOptionPane.showMessageDialog(null, "No se guardo el cliente", 
								"ERROR", JOptionPane.ERROR_MESSAGE);
					}
				} catch (Exception e) {
					JOptionPane.showMessageDialog(null, "Error al ejecutar insert: " + e.getMessage(), 
							"ERROR", JOptionPane.ERROR_MESSAGE);
				}
			}
		});
		btnGuardar.setBounds(304, 295, 121, 29);
		getContentPane().add(btnGuardar);

	}
}
